#!/bin/bash
#leao:Fri Aug 23 06:06:26 PM CST 2024 
  
function build() {  
    typeset -u capital  
    capital=$1  
    mkdir "$1"  
    touch "$1/${1}.h" "$1/${1}.c" "$1/main.c" "$1/Makefile"
    echo "#ifndef __${capital}_H_  
#define __${capital}_H_  
#include <stdio.h> 
#include <stdlib.h>
#define ERROR_CHECK(ret, num, msg) \
    {                              \
        if (ret == num)            \
        {                          \
            perror(msg);        \
            exit(1);              \
        }                          \
    } 
 
  
#endif" > "$1/${1}.h"  
    echo "#include \"${1}.h\"  
  
" > "$1/${1}.c"  
 echo " 
#include \"${1}.h\"  
int main(int argc, char *argv[]){  
    
   
    return 0;  
}" > "$1/main.c"  
    echo "# 假设所有的.c文件都位于当前目录  
SRCS=\$(wildcard *.c)  
  
# 将.c文件转换为.o文件（对象文件）  
OBJS=\$(SRCS:.c=.o)  
  
# 定义可执行文件的名称  
EXE=main  
  
# 定义all目标，它依赖于可执行文件  
all: \$(EXE)  
  
# 为每个.o文件定义一个规则  
%.o: %.c  
	gcc -c -o \$@ $< -g  
  
# 定义可执行文件的规则，它依赖于所有的.o文件  
\$(EXE): \$(OBJS)  
	gcc -o \$@ $^ -lm  
  
# 清理目标，删除所有生成的对象文件和可执行文件  
clean:  
	\$(RM) \$(OBJS)  
" > $1/Makefile

}  
  
if [ -z "$1" ]; then  
    echo "error: missing argument"  
    exit 1  
fi  
  
if [ -d "$1" ]; then  
    echo "${1} 已经是一个目录, 是否重构(y/Y)以继续, 或退出程序(n/N)?"  
    read val  
    case $val in  
        [yY]*)  
            rm -rf "$1"  
            build "$1" ;;  
        [nN]*)  
            exit 0 ;;  
        *)  
            echo "无效输入，请输入 y/Y 或 n/N。"  
            exit 1 ;;  
    esac  
else  
    build "$1"  
fi
